﻿using System;

namespace Flagwind.Data
{
	internal class CacheValueItem<T>
	{
		#region 公共属性

		/// <summary>
		/// 缓存的值。
		/// </summary>
		public T Value
		{
			get;
			set;
		}

		/// <summary>
		/// 缓存创建时间。
		/// </summary>
		public DateTime CreateTime
		{
			get;
			private set;
		}

		/// <summary>
		/// 缓存过期时间。
		/// </summary>
		public DateTime ExpireTime
		{
			get;
			set;
		}

		/// <summary>
		/// 是否绝对过期。
		/// 如果设置，则在设定的过期时间后缓存项被清除。
		/// </summary>
		public bool IsAbsoluteExpire
		{
			get;
			private set;
		}

		/// <summary>
		/// 缓存被命中的次数。
		/// </summary>
		public int HitCount
		{
			get;
			private set;
		}

		public void SubHit()
		{
			HitCount--;
		}

		#endregion

		#region 构造方法

		/// <summary>
		/// 初始化 CacheValueItem 类的新实例。
		/// </summary>
		protected CacheValueItem()
		{
		}

		/// <summary>
		/// 初始化 CacheValueItem 类的新实例。
		/// </summary>
		/// <param name="value">缓存值。</param>
		public CacheValueItem(T value)
		{
			//this.Name = cacheName;
			this.Value = value;
			this.CreateTime = DateTime.Now;
		}

		#endregion
	}

	internal class CacheItem<T> : CacheValueItem<T>
	{
		#region 公共属性

		public string Name
		{
			get;
			private set;
		}

		#endregion

		#region 构造方法

		public CacheItem(string name, T value) : base(value)
		{
			this.Name = name;
		}

		#endregion
	}
}